package resources;

import java.util.List;

import javax.servlet.ServletContext;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.GenericEntity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import jersey.repackaged.com.google.common.collect.Lists;
import model.Brain;
import model.Movie;

/**
 * De resource klasse voor alles wat met Movie te maken heeft. Bevat 2 @GET methodes. 
 * @POST, @DELETE e.d. is niet nodig aangezien er geen films hoeven worden toegevoegd of verwijderd.
 * 
 * @author Kevin en Gerralt
 * @see <a href="http://nl.wikipedia.org/wiki/Lijst_van_HTTP-statuscodes"> Lijst met nederlandse HTTP status codes </a>
 */

@Path("/movie") 
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public class MovieResource {
	@Context ServletContext context; 
	
	/**
	 * De @GET methode voor alle films, status 500 als brain niet opgehaald kan worden.
	 * 
	 * @return indien er geen interne server error (status code 500) ontstaat, 
	 * wordt er een Response gegenereerd met statuscode (200 / OK) en een lijst met Movies
	 */
	@GET 
	public Response getMovies() { 
		Brain b = (Brain) context.getAttribute("brain");
		if(b != null){
			GenericEntity<List<Movie>> entity = 
		            new GenericEntity<List<Movie>>(Lists.newArrayList(b.getMovies())) {};
			return Response.ok(entity).build();
		}
		return Response.status(500).build();
	}
	
	/**
	 * De @GET methode om een enkele film op te halen aan de hand van een uniek imdb tt nummer. 
	 * 
	 * @param imdbtt Het unieke imdb nummer van de te vinden film
	 * @return 
	 * <li>Geeft een Response terug met status OK als het nummer correct is, met in de body de film.
	 * <br><br>
	 * <b>LET OP: </b>Geeft status OK met in de body null terug als er geen film gevonden is! 
	 */
	@GET
	@Path("{imdbtt}")
	public Response getMovie(@PathParam("imdbtt") String imdbtt) {
		Brain b = (Brain) context.getAttribute("brain");
		if(b != null) {
			System.out.println("return movie");
			
			if(imdbtt.startsWith("tt")) {
				imdbtt = imdbtt.replaceAll("t", "");
			}
			
			return Response.ok(b.getMovie(imdbtt)).build();
		}
		return Response.status(500).build();
	}
}
